﻿/* ######################################## *\
 * ### Copyright (C) 2009 AJ Ravindiran ### *
\* ######################################## */
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace AJRavindiran.Jolt.RuneScape.Network.Login
{
    /// <summary>
    /// Represents a login update server.
    /// </summary>
    public class LoginUpdateServer
    {
        #region Fields
        /// <summary>
        /// The update keys needed to update the r508 client.
        /// </summary>
        private int[] updateKeys =
        {            
            0xff, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0xd8, 
            0x84, 0xa1, 0xa1, 0x2b, 0x00, 0x00, 0x00, 0xba, 
            0x58, 0x64, 0xe8, 0x14, 0x00, 0x00, 0x00, 0x7b, 
            0xcc, 0xa0, 0x7e, 0x23, 0x00, 0x00, 0x00, 0x48, 
            0x20, 0x0e, 0xe3, 0x6e, 0x00, 0x00, 0x01, 0x88, 
            0xec, 0x0d, 0x58, 0xed, 0x00, 0x00, 0x00, 0x71, 
            0xb9, 0x4c, 0xc0, 0x50, 0x00, 0x00, 0x01, 0x8b, 
            0x5b, 0x61, 0x79, 0x20, 0x00, 0x00, 0x00, 0x0c, 
            0x0c, 0x69, 0xb1, 0xc8, 0x00, 0x00, 0x02, 0x31, 
            0xc8, 0x56, 0x67, 0x52, 0x00, 0x00, 0x00, 0x69, 
            0x78, 0x17, 0x7b, 0xe2, 0x00, 0x00, 0x00, 0xc3, 
            0x29, 0x76, 0x27, 0x6a, 0x00, 0x00, 0x00, 0x05, 
            0x44, 0xe7, 0x75, 0xcb, 0x00, 0x00, 0x00, 0x08, 
            0x7d, 0x21, 0x80, 0xd5, 0x00, 0x00, 0x01, 0x58, 
            0xeb, 0x7d, 0x49, 0x8e, 0x00, 0x00, 0x00, 0x0c, 
            0xf4, 0xdf, 0xd6, 0x4d, 0x00, 0x00, 0x00, 0x18, 
            0xec, 0x33, 0x31, 0x7e, 0x00, 0x00, 0x00, 0x01, 
            0xf7, 0x7a, 0x09, 0xe3, 0x00, 0x00, 0x00, 0xd7, 
            0xe6, 0xa7, 0xa5, 0x18, 0x00, 0x00, 0x00, 0x45, 
            0xb5, 0x0a, 0xe0, 0x64, 0x00, 0x00, 0x00, 0x75, 
            0xba, 0xf2, 0xa2, 0xb9, 0x00, 0x00, 0x00, 0x5f, 
            0x31, 0xff, 0xfd, 0x16, 0x00, 0x00, 0x01, 0x48, 
            0x03, 0xf5, 0x55, 0xab, 0x00, 0x00, 0x00, 0x1e, 
            0x85, 0x03, 0x5e, 0xa7, 0x00, 0x00, 0x00, 0x23, 
            0x4e, 0x81, 0xae, 0x7d, 0x00, 0x00, 0x00, 0x18, 
            0x67, 0x07, 0x33, 0xe3, 0x00, 0x00, 0x00, 0x14, 
            0xab, 0x81, 0x05, 0xac, 0x00, 0x00, 0x00, 0x03, 
            0x24, 0x75, 0x85, 0x14, 0x00, 0x00, 0x00, 0x36
        };
        #endregion Fields

        #region Methods
        /// <summary>
        /// If the connection is the client's update server than send the keys.
        /// </summary>
        public void SendUpdateKeys(Models.Characters.Character character)
        {
            try
            {
                if (character.GetStatus().LoginStage == 0)
                {
                    if (!RuneScape.GetLoginServer().GetStreamBuffer().FillStream(character, 3))
                        return;
                    character.GetStreamWriter().WriteByte(0);
                    RuneScape.GetLoginServer().GetStreamBuffer().DirectFlushStream(character);
                }
                else if (character.GetStatus().LoginStage == -5)
                {
                    if (!RuneScape.GetLoginServer().GetStreamBuffer().FillStream(character, 8))
                        return;
                    for (int i = 0; i < updateKeys.Length; i++)
                        character.GetStreamWriter().WriteByte(updateKeys[i]);
                    RuneScape.GetLoginServer().GetStreamBuffer().DirectFlushStream(character);
                    character.GetStatus().LoginStage = -1;
                }
            }
            catch (Login.Exceptions.PacketException use)
            {
                Jolt.GetLog().WriteException(use);
                throw use;
            }
        }
        #endregion Methods
    }
}
